Skip to content

[FIX] Unblock OSS first-time setup — sample envs, host-gateway, ollama hint#2107

Merged
chandrasekharan-zipstack merged 5 commits into
mainfrom
misc/oss-setup-fixes
Jun 24, 2026
Merged

[FIX] Unblock OSS first-time setup — sample envs, host-gateway, ollama hint#2107
chandrasekharan-zipstack merged 5 commits into
mainfrom
misc/oss-setup-fixes

Conversation

@chandrasekharan-zipstack

Copy link
Copy Markdown
Contributor

What

Fix six unrelated-but-co-incident bugs that make a first-time OSS install non-functional out of the box (specifically Prompt Studio indexing + host-installed adapters).

  1. backend/sample.env: INTERNAL_SERVICE_API_KEY was blank → workers' X-API-Key calls into backend 500. Set to dev default that matches workers/sample.env.
  2. backend/sample.env: add TEMPORARY_REMOTE_STORAGE (only PERMANENT_* was set).
  3. workers/sample.env: add PERMANENT_REMOTE_STORAGE, TEMPORARY_REMOTE_STORAGE, REMOTE_PROMPT_STUDIO_FILE_PATH. Without these the executor/ide-callback workers crash at json.loads("") on first Prompt Studio index.
  4. unstract/sdk1/.../file_storage/env_helper.py: raise FileStorageError with a clear remediation message when the storage env var is unset or invalid JSON, instead of json.loads("") exploding with a useless JSONDecodeError.
  5. adapters/llm1 + adapters/embedding1 ollama.json: fix typo docker.host.internalhost.docker.internal in the Base URL hint.
  6. docker/docker-compose.yaml: extract a YAML anchor x-host-gateway and apply it (<<: *host_gateway) to backend, prompt-service, runner, celery-, and every worker- (16 services). Before this only backend and prompt-service had extra_hosts, so adapter Test passed in prompt-service but real prompt execution from the worker pool failed with EAI_NONAME against host.docker.internal.
  7. run-platform.sh: fail fast with actionable hint when docker info can't reach the daemon (missing docker group membership, etc.).

Why

Reported by a new OSS user (2026-05-12): even after correctly setting up Ollama on the host and the bundled stack via ./run-platform.sh, Prompt Studio indexing hangs forever and host-installed LLM/embedding adapters give confusing "Test passes, prompt fails" errors. Each fix here removes one step that blocks a fresh git clone from reaching a successful first prompt run.

How

  • Sample env edits + EnvHelper guard are additive; existing prod deployments that already set these vars are unaffected.
  • Compose anchor: <<: *host_gateway merges into each service's mapping. Validated locally with docker compose config — anchor expands to 16 services.
  • docker info check added immediately after the existing command -v docker check in run-platform.sh.

Can this PR break any existing features. If yes, please list possible items. If no, please explain why. (PS: Admins do not merge the PR without this section filled)

  • No. Changes are:
    • Sample envs (only affect fresh installs that copy from sample.env).
    • EnvHelper now raises a clearer error in cases that were already broken (empty / invalid JSON). Callers that pass a valid value see no change.
    • Compose anchor only adds an extra_hosts entry; no service config is changed otherwise.
    • run-platform.sh check fires before any container actions; only impacts the case where the daemon is unreachable, which already fails downstream.
    • Ollama JSON hint is a description string only.

Database Migrations

  • None

Env Config

  • New defaults in backend/sample.env and workers/sample.env. Existing .env files are not touched; users who already have working configs are unaffected. New installs that copy from sample.env get a functional Prompt Studio out of the box.

Relevant Docs

  • Should follow with a small docs update in unstract-docs for the "host-installed Ollama" / docker socket prerequisites notes (out of scope for this PR).

Related Issues or PRs

Dependencies Versions

  • None changed.

Notes on Testing

  • Verified docker compose -f docker/docker-compose.yaml config resolves; YAML anchor expands host.docker.internal:host-gateway into all 16 expected services.
  • EnvHelper: manual smoke — unsetting PERMANENT_REMOTE_STORAGE now raises FileStorageError with the expected message rather than JSONDecodeError.
  • run-platform.sh docker-info check: simulated by stopping the daemon — script exits with the new hint instead of the original opaque error from docker compose.
  • End-to-end Prompt Studio index against host-installed Ollama on Linux: works after the sample env + extra_hosts changes (per originating report).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Br691aZbhfcB4xdswrUjuw

…a hint

- backend/sample.env: set INTERNAL_SERVICE_API_KEY=dev-internal-key-123 so
  workers' internal API calls don't 500 against backend middleware. Add
  TEMPORARY_REMOTE_STORAGE alongside PERMANENT_REMOTE_STORAGE.

- workers/sample.env: mirror PERMANENT_REMOTE_STORAGE, TEMPORARY_REMOTE_STORAGE,
  REMOTE_PROMPT_STUDIO_FILE_PATH. Without these the executor / ide-callback
  workers crash at json.loads("") on first Prompt Studio index.

- unstract/sdk1 file_storage/env_helper.py: raise FileStorageError with a
  clear message when the storage env var is unset or invalid JSON, instead
  of letting json.loads("") raise an inscrutable JSONDecodeError.

- adapters/llm1 + embedding1 ollama.json: fix typo
  docker.host.internal -> host.docker.internal in the Base URL hint.

- docker/docker-compose.yaml: extract a YAML anchor x-host-gateway and
  apply it (<<: *host_gateway) to backend, prompt-service, runner,
  celery-*, and every worker-* service. Before this only backend and
  prompt-service had extra_hosts, so adapter Test passed in
  prompt-service but real prompt execution from the worker pool failed
  with EAI_NONAME against host.docker.internal.

- run-platform.sh: fail fast with actionable hint when `docker info`
  can't reach the daemon (missing docker group membership, etc.).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Br691aZbhfcB4xdswrUjuw
@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 133255a1-9f42-42eb-9995-af5bae88bb88

📥 Commits

Reviewing files that changed from the base of the PR and between 1ca86d1 and f7403df.

📒 Files selected for processing (1)
  • unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py

Summary by CodeRabbit

  • Bug Fixes

    • Improved platform startup checks by verifying Docker daemon connectivity, with OS-specific guidance when unavailable.
    • Strengthened validation for remote/file storage configuration by detecting missing/empty values, invalid JSON, and unsupported/misconfigured providers with clearer errors.
  • Chores

    • Standardized Docker networking via a shared host-gateway setting across services.
    • Updated sample environment configuration for Prompt Studio/IDE remote storage (permanent/temporary settings) and aligned related example values.
    • Corrected Ollama schema example URLs to use host.docker.internal.

Walkthrough

Updates sample environment files, strengthens remote storage JSON validation, centralizes Docker host-gateway wiring, adds a Docker daemon check to startup, and corrects Ollama hostname examples.

Changes

Environment, storage, and Docker runtime

Layer / File(s) Summary
Remote storage env and parsing
backend/sample.env, workers/sample.env, unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py
INTERNAL_SERVICE_API_KEY is set in backend/sample.env; remote storage variables are added for backend and workers; EnvHelper.get_storage() now validates unset, empty, malformed, and non-object JSON values before returning the storage implementation.
Shared host-gateway compose wiring
docker/docker-compose.yaml
A reusable x-host-gateway anchor defines host.docker.internal:host-gateway, and the backend, prompt-service, runner, and worker services now inherit that shared mapping.
Docker check and hostname examples
run-platform.sh, unstract/sdk1/src/unstract/sdk1/adapters/embedding1/static/ollama.json, unstract/sdk1/src/unstract/sdk1/adapters/llm1/static/ollama.json
run-platform.sh now runs docker info during dependency checks and prints OS-specific remediation text on failure; both Ollama schemas update their base_url examples to host.docker.internal.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main fix for first-time OSS setup and mentions the key areas changed.
Description check ✅ Passed The description follows the template closely and covers all required sections, with only minor gaps like a sparse Screenshots/Checklist section.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch misc/oss-setup-fixes

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR addresses six first-time-setup blockers for OSS users, each independently preventing a successful Prompt Studio run or host-adapter connectivity. All changes are additive or fix already-broken paths and do not affect existing production deployments with working configs.

  • Sample env fixes (backend/sample.env, workers/sample.env): fills in INTERNAL_SERVICE_API_KEY, TEMPORARY_REMOTE_STORAGE, PERMANENT_REMOTE_STORAGE, and REMOTE_PROMPT_STUDIO_FILE_PATH so a fresh clone-and-copy gets a functional Prompt Studio out of the box without manual env surgery.
  • EnvHelper hardening (env_helper.py): replaces the opaque json.loads("") crash with layered FileStorageError raises covering unset, empty, non-JSON, non-object, missing provider, and invalid credentials — all with a remediation hint.
  • Docker host-gateway anchor (docker-compose.yaml): extracts the extra_hosts entry into a reusable YAML anchor (with an inline comment warning about merge-key list-shadowing) and propagates it to 16 services, closing the gap where adapter Test passed in prompt-service but prompt execution from worker containers failed with EAI_NONAME.

Confidence Score: 5/5

Safe to merge — all changes are additive fixes to broken first-run paths; existing working deployments are unaffected.

Every change targets a path that was already broken for new installs: empty env vars now surface a clear error instead of crashing, the host-gateway entry is now present in all worker containers, and the sample env files give fresh clones a complete working config. No existing behavior for users with correct configs is altered.

No files require special attention. The docker-compose anchor includes an inline comment about the YAML merge-key list-shadowing footgun, and the run-platform.sh check now covers Linux, macOS, and Windows branches.

Important Files Changed

Filename Overview
backend/sample.env Adds dev default for INTERNAL_SERVICE_API_KEY and TEMPORARY_REMOTE_STORAGE; removes stray quotes from REMOTE_PROMPT_STUDIO_FILE_PATH.
workers/sample.env Adds PERMANENT_REMOTE_STORAGE, TEMPORARY_REMOTE_STORAGE, and REMOTE_PROMPT_STUDIO_FILE_PATH required by executor/ide-callback workers for Prompt Studio flows.
docker/docker-compose.yaml Introduces x-host-gateway YAML anchor with an inline warning about merge-key shadowing, and applies it to 16 services; removes now-redundant inline extra_hosts from backend and prompt-service.
run-platform.sh Adds docker info pre-flight check with OS-specific (Linux/macOS/Windows) remediation hints; fails fast before any compose actions when the daemon is unreachable.
unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py Replaces the silent json.loads("") crash with layered validation (unset/empty, invalid JSON, non-object, missing provider, non-dict credentials) all raising FileStorageError with actionable messages.
unstract/sdk1/src/unstract/sdk1/adapters/llm1/static/ollama.json Fixes typo in Base URL hint: docker.host.internal → host.docker.internal.
unstract/sdk1/src/unstract/sdk1/adapters/embedding1/static/ollama.json Same typo fix as the LLM adapter: docker.host.internal → host.docker.internal.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["EnvHelper.get_storage(storage_type, env_name)"] --> B{env var set\nand non-empty?}
    B -- No --> C["raise FileStorageError\n'unset or empty'"]
    B -- Yes --> D{valid JSON?}
    D -- No --> E["raise FileStorageError\n'not valid JSON'"]
    D -- Yes --> F{is a dict?}
    F -- No --> G["raise FileStorageError\n'must be JSON object'"]
    F -- Yes --> H{provider key\npresent & valid?}
    H -- KeyError/ValueError --> I["raise FileStorageError\n'invalid storage config'"]
    H -- OK --> J{credentials\nis a dict?}
    J -- No --> K["raise FileStorageError\n'credentials must be JSON object'"]
    J -- Yes --> L{storage_type?}
    L -- PERMANENT --> M["PermanentFileStorage(provider, **credentials)"]
    L -- SHARED_TEMPORARY --> N["SharedTemporaryFileStorage(provider, **credentials)"]
    L -- other --> O["raise NotImplementedError"]
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A["EnvHelper.get_storage(storage_type, env_name)"] --> B{env var set\nand non-empty?}
    B -- No --> C["raise FileStorageError\n'unset or empty'"]
    B -- Yes --> D{valid JSON?}
    D -- No --> E["raise FileStorageError\n'not valid JSON'"]
    D -- Yes --> F{is a dict?}
    F -- No --> G["raise FileStorageError\n'must be JSON object'"]
    F -- Yes --> H{provider key\npresent & valid?}
    H -- KeyError/ValueError --> I["raise FileStorageError\n'invalid storage config'"]
    H -- OK --> J{credentials\nis a dict?}
    J -- No --> K["raise FileStorageError\n'credentials must be JSON object'"]
    J -- Yes --> L{storage_type?}
    L -- PERMANENT --> M["PermanentFileStorage(provider, **credentials)"]
    L -- SHARED_TEMPORARY --> N["SharedTemporaryFileStorage(provider, **credentials)"]
    L -- other --> O["raise NotImplementedError"]
Loading

Reviews (5): Last reviewed commit: "[FIX] Split long f-string in EnvHelper.g..." | Re-trigger Greptile

Comment thread run-platform.sh
Comment thread docker/docker-compose.yaml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py`:
- Around line 41-49: The code at lines 48-49 where FileStorageProvider is
instantiated and credentials are accessed can still throw raw TypeError or
ValueError exceptions (for example, if file_storage_creds is not a dictionary,
or if the provider value is invalid) which bypass the FileStorageError handling.
Wrap the FileStorageProvider instantiation and credentials dictionary access in
a try-except block that catches TypeError and ValueError, and re-raise them as
FileStorageError with a descriptive message that includes the
EnvHelper.ENV_CONFIG_FORMAT reference, similar to how the JSONDecodeError is
handled. This ensures all configuration validation errors are normalized to
FileStorageError for consistent error handling.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bfd2382d-9a06-40fa-8ab6-97ea75851cab

📥 Commits

Reviewing files that changed from the base of the PR and between 7aba21f and 9dda3a0.

📒 Files selected for processing (7)
  • backend/sample.env
  • docker/docker-compose.yaml
  • run-platform.sh
  • unstract/sdk1/src/unstract/sdk1/adapters/embedding1/static/ollama.json
  • unstract/sdk1/src/unstract/sdk1/adapters/llm1/static/ollama.json
  • unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py
  • workers/sample.env

Comment thread unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py Outdated
- env_helper.py: validate parsed JSON is a dict; normalize KeyError /
  TypeError / ValueError from provider construction into FileStorageError
  with the remediation message, so callers never see raw json/dict
  exceptions on a misconfigured env var.

- docker-compose.yaml: extend the x-host-gateway anchor's docstring to
  warn that YAML merge does NOT concatenate lists — adding a sibling
  extra_hosts to a service shadows the anchor entry rather than
  appending. Future contributors must inline all entries instead.

- run-platform.sh: branch the docker-daemon remediation hints by OS
  (Linux / macOS / Windows / other), so macOS users see the
  Docker-Desktop hint instead of irrelevant getent/usermod commands.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Br691aZbhfcB4xdswrUjuw

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py (1)

65-66: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use logger.exception so the validation failure keeps its traceback.

Line 65 is inside the except block and is currently flagged by SonarCloud; logging the exception once preserves context while keeping the normalized FileStorageError behavior unchanged.

Proposed fix
-            logger.error(f"Invalid storage configuration in env: {str(e)}")
-            logger.error(f"The configuration format is {EnvHelper.ENV_CONFIG_FORMAT}")
+            logger.exception(
+                "Invalid storage configuration in env var '%s'. Expected: %s",
+                env_name,
+                EnvHelper.ENV_CONFIG_FORMAT,
+            )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py` around lines 65 -
66, In the except block of the EnvHelper class where the invalid storage
configuration error is being logged, replace the logger.error call that logs the
exception message (the one with str(e)) with logger.exception instead. This will
preserve the full traceback context for debugging while keeping the
FileStorageError handling behavior intact. Keep the second logger.error call
that displays the ENV_CONFIG_FORMAT as is.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py`:
- Around line 65-66: In the except block of the EnvHelper class where the
invalid storage configuration error is being logged, replace the logger.error
call that logs the exception message (the one with str(e)) with logger.exception
instead. This will preserve the full traceback context for debugging while
keeping the FileStorageError handling behavior intact. Keep the second
logger.error call that displays the ENV_CONFIG_FORMAT as is.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ed46ecd1-550b-4e91-a960-2c763ed77f9a

📥 Commits

Reviewing files that changed from the base of the PR and between 9dda3a0 and bc4ad1f.

📒 Files selected for processing (3)
  • docker/docker-compose.yaml
  • run-platform.sh
  • unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py
🚧 Files skipped from review as they are similar to previous changes (2)
  • run-platform.sh
  • docker/docker-compose.yaml

@jaseemjaskp jaseemjaskp left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed via PR Review Toolkit (code-reviewer, silent-failure-hunter, comment-analyzer, code-simplifier). Verified independently: the x-host-gateway anchor expands into all 16 services (docker compose config renders host.docker.internal:host-gateway for each), and the get_storage exception-type change is caller-safe — none of the ~25 callers in backend/prompt-service catch KeyError/JSONDecodeError from it. No blocking issues; the change cleanly unblocks first-time OSS setup. A few non-blocking nits below.

Comment thread unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py Outdated
Comment thread unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py Outdated
Comment thread workers/sample.env Outdated
Comment thread backend/sample.env Outdated
- env_helper.py: narrow except (KeyError, ValueError) to the FileStorageProvider
  resolution only; constructor / fsspec exceptions now propagate untouched
  instead of being mislabeled as env config errors.
- env_helper.py: drop dead `except FileStorageError: raise e` (inner try
  doesn't catch FileStorageError, and `raise e` would reset traceback).
- workers/sample.env: refresh comment to match new FileStorageError behavior.
- backend/sample.env: unquote REMOTE_PROMPT_STUDIO_FILE_PATH for consistency
  with workers/sample.env.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Br691aZbhfcB4xdswrUjuw

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py`:
- Around line 61-65: `create_file_storage` (or the file-storage factory logic in
`env_helper.py`) currently unpacks `credentials` into `PermanentFileStorage` and
`SharedTemporaryFileStorage` without validating its type, so non-dict values
raise a raw TypeError. Add an explicit check right after reading
`CredentialKeyword.CREDENTIALS` to ensure `credentials` is an object/mapping
before using `**credentials`, and raise `FileStorageError` with a clear message
when the shape is invalid. Keep the validation in the same branch that selects
`StorageType.PERMANENT` and `StorageType.SHARED_TEMPORARY` so both paths use the
same guard.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 484eeba4-228c-4e26-a490-6aaae922e1a7

📥 Commits

Reviewing files that changed from the base of the PR and between bc4ad1f and c76437e.

📒 Files selected for processing (3)
  • backend/sample.env
  • unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py
  • workers/sample.env
🚧 Files skipped from review as they are similar to previous changes (2)
  • workers/sample.env
  • backend/sample.env

Comment thread unstract/sdk1/src/unstract/sdk1/file_storage/env_helper.py
chandrasekharan-zipstack and others added 2 commits June 24, 2026 10:42
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>
The coderabbit suggestion added an isinstance(credentials, dict) guard whose
error message exceeded the 90-char line limit. Split the f-string across two
adjacent string literals to keep behavior identical.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Br691aZbhfcB4xdswrUjuw
@github-actions

Copy link
Copy Markdown
Contributor

Unstract test results

Per-group results

Status Group Tier Passed Failed Errors Skipped Duration (s)
unit-connectors unit 64 12 0 3 16.8
unit-core unit 0 0 4 0 1.2
unit-platform-service unit 9 0 1 0 1.5
unit-prompt-service unit 15 0 0 0 19.9
unit-rig unit 53 0 0 0 3.4
unit-runner unit 11 0 0 0 3.1
unit-sdk1 unit 390 0 0 0 20.4
unit-tool-registry unit 0 0 1 0 1.3
unit-workers unit 0 0 0 0 18.3
TOTAL 542 12 6 3 85.8

Critical paths

⚠️ Critical paths not yet covered

  • auth-login — User can log in and obtain a session cookie. (entry: POST /api/v1/auth/login; declared coverage: no groups declared)
  • adapter-register-llm — Register and validate an LLM adapter. (entry: POST /api/v1/adapter/; declared coverage: no groups declared)
  • workflow-create-execute — Create a workflow, configure source+destination, execute, poll, fetch result. (entry: POST /api/v1/workflow/{id}/execute/; declared coverage: e2e-workflow)
  • api-deployment-run — Deploy a workflow as an API, POST a document, receive structured JSON. (entry: POST /deployment/api/{org}/{name}/; declared coverage: e2e-api-deployment)
  • prompt-studio-fetch-response — Prompt Studio: create project, add prompt, run single-pass, get response. (entry: POST /api/v1/prompt-studio/prompt-studio-tool/{id}/fetch_response/; declared coverage: e2e-prompt-studio)
  • pipeline-etl-execute — Run an ETL pipeline from source connector to destination. (entry: POST /api/v1/pipeline/{id}/execute/; declared coverage: no groups declared)
  • usage-token-tracking — Per-execution token usage is recorded and retrievable. (entry: GET /api/v1/usage/get_token_usage/; declared coverage: no groups declared)
  • workflow-execution-fan-out — Multi-file workflow execution fans out to file-processing workers and rejoins. (entry: internal: backend → rabbitmq → workers/file_processing; declared coverage: no groups declared)
  • callback-result-delivery — Async results are posted back via the callback worker. (entry: internal: workers/callback → backend /internal endpoints; declared coverage: no groups declared)
✅ Covered critical paths
  • tool-sandbox-exec — covered by unit-runner

@chandrasekharan-zipstack chandrasekharan-zipstack merged commit 550f9e5 into main Jun 24, 2026
9 checks passed
@chandrasekharan-zipstack chandrasekharan-zipstack deleted the misc/oss-setup-fixes branch June 24, 2026 06:44
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants